﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Crosland.Offline.Core;
using Crosland.Offline.Logic;
using Crosland.Offline.WinForm.Properties;

namespace Crosland.Offline.WinForm
{
    public partial class MainForm : Form
    {

        /// <summary>
        /// Instancia de Clase que maneja la logica
        /// </summary>
        SeguridadLogic logic = new SeguridadLogic();

        public MainForm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Evento de Carga del Formulario
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainForm_Load(object sender, EventArgs e)
        {
            this.CargarOpciones();
        }

        /// <summary>
        /// Permite cargar las opciones del usuario
        /// </summary>
        protected void CargarOpciones()
        {
            this.msGeneral.Items.Clear();
            int? idPadre = 1;
            this.LlenarOpciones(idPadre, null, this.msGeneral, idPadre);           

        }
             /// <summary>
        /// Carga en el treview, las opciones del sistema
        /// </summary>
        /// <param name="codigoPadre"></param>
        /// <param name="node"></param>
        /// <param name="tree"></param>
        public void LlenarOpciones(int? codigoPadre, ToolStripMenuItem node, MenuStrip tree, int? valorInicial)
        {
            List<Opcion> treeItemsChild = this.logic.ListarOpcionPorPadre(Globals.UserName,(int)codigoPadre);

            foreach (Opcion hijos in treeItemsChild)
            {
                ToolStripMenuItem newNode = new ToolStripMenuItem(hijos.DesNombre);
                newNode.Tag = hijos.NomFormulario;
                newNode.Click += new EventHandler(newNode_Click);

                if (codigoPadre == valorInicial) tree.Items.Add(newNode);
                else node.DropDownItems.Add(newNode);
                this.LlenarOpciones(hijos.ID, newNode, null, null);
            }
        }

        /// <summary>
        /// Control los clicks sobre los items del menu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void newNode_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
            
            string formulario = (clickedItem.Tag!=null)?clickedItem.Tag.ToString():null;
            
            if (!string.IsNullOrEmpty(formulario))
            {                           
                Form f = GetForm(formulario);
                if (f != null)
                {
                    f.MdiParent = this;
                    f.Show();
                }
            }
        }

        /// <summary>
        /// Obtiene la instancia del formulario
        /// </summary>
        /// <param name="FormName"></param>
        /// <returns></returns>
        public Form GetForm(string FormName)
        {
            if (!String.IsNullOrEmpty(FormName))
                return (Form)Activator.CreateInstance(Type.GetType(Resources.NamespaceProyecto + FormName));
            return null;
        }
        
    }
}
